其他
神器,代码画架构图,部署图,yyds
点击上方蓝字
最近在梳理内部一些系统的调用架构图,同时整理下运维这边涉及到的监控还有ELK的一些架构图,用一些架构图的软件虽然可以完成,但是显示上不太直观,最近在逛github的时候发现了一款可以用代码来画架构的神器,果断试用。
使用的话也比较简单,直接pip下载相关的包
pip install diagrams
参考文档:
https://diagrams.mingrammer.com/
https://github.com/mingrammer/diagrams
♦️
准备工作
在使用前
有个组件需要提前安装下,安装完后,需要添加环境变量
可以下载压缩包,解压后放到anaconda的路径下,路径可以参考下面:
https://graphviz.org/download/
♦️
上手
一个最简单单链路架构
直接提供了阿里云的一些组件,可以直接调用,其它云基本也是这些产品
所以可以直接用
from diagrams import Diagram
from diagrams.alibabacloud.network import SLB
from diagrams.alibabacloud.compute import ECS
from diagrams.alibabacloud.web import Domain
from diagrams.alibabacloud.web import Dns
from diagrams.onprem.network import Nginx
from diagrams.onprem.compute import Server
from diagrams.alibabacloud.database import RDS
with Diagram("Web Service", show=False):
Domain("domain") >> Dns("dns") >> SLB("SLB") >> Nginx("ng") >> Server("web") >> RDS("db")
下面介绍一个具体的例子,我这边的一个ELK的实际调用链路
我们可以先把这些组件画好
from diagrams import Cluster, Diagram
from diagrams.elastic.elasticsearch import Beats
from diagrams.elastic.elasticsearch import Elasticsearch
from diagrams.elastic.elasticsearch import Kibana
from diagrams.elastic.elasticsearch import Logstash
from diagrams.onprem.queue import Kafka
with Diagram("ELK-cluster", show=False):
with Cluster("kafka Cluster"):
kafka = [
Kafka("broker0"),
Kafka("broker1"),
Kafka("broker2")]
with Cluster("elasticsearch Cluster"):
es = [
Elasticsearch("node1"),
Elasticsearch("node2"),
Elasticsearch("node3")]
agent = Beats("logging")
logstash = Logstash("analytics")
kibana = Kibana("kibana")
具体生成的图是这样的:
然后把这些组件整合起来
agent >> kafka >> logstash >> es >> kibana
最终生成的效果是这样的
接下来我们画一个整体的业务架构图,包含了业务组件、监控组件及日志收集组件
from diagrams import Cluster, Diagram
from diagrams.alibabacloud.network import SLB
from diagrams.alibabacloud.compute import ECS
from diagrams.alibabacloud.web import Domain
from diagrams.alibabacloud.web import Dns
from diagrams.onprem.network import Nginx
from diagrams.onprem.compute import Server
from diagrams.alibabacloud.database import RDS
from diagrams.elastic.elasticsearch import Beats
from diagrams.elastic.elasticsearch import Elasticsearch
from diagrams.elastic.elasticsearch import Kibana
from diagrams.elastic.elasticsearch import Logstash
from diagrams.onprem.compute import Server
from diagrams.onprem.database import PostgreSQL
from diagrams.onprem.inmemory import Redis
from diagrams.onprem.monitoring import Grafana, Prometheus,PrometheusOperator
from diagrams.onprem.network import Nginx
from diagrams.onprem.queue import Kafka
with Diagram("Advanced Web Service with On-Premise", show=False):
domain = Domain("domain")
dns = Dns("dns")
ingress = Nginx("nginx")
metrics = PrometheusOperator("metric")
metrics << Prometheus("prometheus") << Grafana("monitoring")
with Cluster("Service Cluster"):
grpcsvc = [
Server("web1"),
Server("web2"),
Server("web3")]
with Cluster("Sessions HA"):
primary = Redis("session")
primary - Redis("replica") << metrics
grpcsvc >> primary
with Cluster("Database HA"):
primary = PostgreSQL("users")
primary - PostgreSQL("replica") << metrics
grpcsvc >> primary
aggregator = Beats("logging")
aggregator >> Kafka("stream") >> Logstash("analytics") >> Elasticsearch("es") >> Kibana("kibana")
domain >> dns >> ingress >> grpcsvc >> aggregator
具体效果可以看下:
根据实际调整了下,实际监控还会对nginx和web服务进行监控
官网还有很多其它的组件,可以去尝试下,也有很多的示例可以去参考。
👆点击查看更多内容👆
推荐阅读
记得星标记一下,下次更容易找到我